package evi.com.evi.utils;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.support.v4.view.ViewCompat;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;

/**
 * 获得屏幕相关的辅助类
 * 
 * @author zhy
 * 
 */
public class ScreenUtils  extends Utils {
	/**
	 * 获得屏幕高度
	 * 
	 * @param context
	 * @return
	 */
	public static int getScreenWidth(Context context) {
		WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.widthPixels;
	}
	/**
	 * 获得屏幕宽度
	 * 
	 * @param context
	 * @return
	 */
	public static int getScreenHeight(Context context) {
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.heightPixels;
	}

	/**
	 * 获得状态栏的高度
	 * 
	 * @param context
	 * @return
	 */
	public static int getStatusHeight(Context context) {
		int statusHeight = -1;
		try {
			Class<?> clazz = Class.forName("com.android.internal.R$dimen");
			Object object = clazz.newInstance();
			int height = Integer.parseInt(clazz.getField("status_bar_height")
					.get(object).toString());
			statusHeight = context.getResources().getDimensionPixelSize(height);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return statusHeight;
	}

	/**
	 * 获取当前屏幕截图，包含状态栏
	 * 
	 * @param activity
	 * @return
	 */
	public static Bitmap snapShotWithStatusBar(Activity activity) {
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bmp = view.getDrawingCache();
		int width = getScreenWidth(activity);
		int height = getScreenHeight(activity);
		Bitmap bp = null;
		bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
		view.destroyDrawingCache();
		return bp;

	}

	/**
	 * 获取当前屏幕截图，不包含状态栏
	 * 
	 * @param activity
	 * @return
	 */
	public static Bitmap snapShotWithoutStatusBar(Activity activity) {
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bmp = view.getDrawingCache();
		Rect frame = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
		int statusBarHeight = frame.top;

		int width = getScreenWidth(activity);
		int height = getScreenHeight(activity);
		Bitmap bp = null;
		bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
				- statusBarHeight);
		view.destroyDrawingCache();
		return bp;
	}

	/**
	 * @param activity
	 *            上下文
	 * @param hideStatusBar
	 *            是否覆盖状态栏（true-状态栏隐藏，内容view往上移； false-重新定义状态栏的颜色值）
	 * @param color
	 *            状态栏颜色值
	 */
	public static void setTranStatus(Activity activity, boolean hideStatusBar,
			int color) {
		if (hideStatusBar) {
			Window window = activity.getWindow();
			window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

			ViewGroup mContentView = (ViewGroup) activity
					.findViewById(Window.ID_ANDROID_CONTENT);
			View statusBarView = mContentView.getChildAt(0);
			// 移除假的 View
			if (statusBarView != null
					&& statusBarView.getLayoutParams() != null
					&& statusBarView.getLayoutParams().height == getStatusHeight(activity)) {
				mContentView.removeView(statusBarView);
			}
			// 不预留空间
			if (mContentView.getChildAt(0) != null) {
				android.support.v4.view.ViewCompat.setFitsSystemWindows(mContentView.getChildAt(0),
						false);
			}

			// //透明状态栏
			// activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
			// //透明导航栏
			// activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

		} else {
			Window window = activity.getWindow();
			window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

			ViewGroup mContentView = (ViewGroup) activity
					.findViewById(Window.ID_ANDROID_CONTENT);
			ViewGroup mContentParent = (ViewGroup) mContentView.getParent();

			View statusBarView = mContentParent.getChildAt(0);
			if (statusBarView != null
					&& statusBarView.getLayoutParams() != null
					&& statusBarView.getLayoutParams().height == ScreenUtils
							.getStatusHeight(activity)) {
				// 避免重复调用时多次添加 View
				statusBarView.setBackgroundColor(color);
				return;
			}

			// 创建一个假的 View, 并添加到 ContentParent
			statusBarView = new View(activity);
			ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
					ViewGroup.LayoutParams.MATCH_PARENT,
					getStatusHeight(activity));
			statusBarView.setBackgroundColor(color);
			mContentParent.addView(statusBarView, 0, lp);

			// ChildView 不需要预留系统空间
			View mChildView = mContentView.getChildAt(0);
			if (mChildView != null) {
				android.support.v4.view.ViewCompat.setFitsSystemWindows(mChildView, false);
			}
		}
	}

	/**
	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
	 */
	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}

	/**
	 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}
}
